package com.jincheng.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jincheng.system.domain.Org;
import com.jincheng.system.domain.Tribe;
import com.jincheng.system.domain.dto.TribeDetailDTO;
import com.jincheng.system.domain.dto.TribeScreenDTO;
import com.jincheng.system.domain.dto.TribeSimpleDTO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 部落Mapper接口
 *
 * @author DairyJay
 * @date 2025-02-27
 */
public interface TribeMapper extends BaseMapper<Tribe> {

    /**
     * 查询部落列表
     *
     * @param tribe 部落
     * @return 部落集合
     */
    List<TribeDetailDTO> selectTribeList(Tribe tribe);

    /**
     * 查询当前用户部落列表
     *
     * @return 部落列表
     */
    List<Tribe> selectTribeListByUserId(Long userId);

    /**
     * 查询部落列表
     *
     * @param tribeScreenDTO 筛选条件
     * @return 部落列表
     */
    List<Tribe> selectActivityListByScreen(TribeScreenDTO tribeScreenDTO);

    /**
     * 查询组织列表
     *
     * @return 组织列表
     */
    List<Org> selectOrgList();


    /**
     * 新增部落
     *
     * @param tribe 部落
     * @return 结果
     */
    public int insertTribe(Tribe tribe);

    /**
     * 修改部落
     *
     * @param tribe 部落
     * @return 结果
     */
    public int updateTribe(Tribe tribe);

    /**
     * 删除部落
     *
     * @param tribeId 部落主键
     * @return 结果
     */
    public int deleteTribeByTribeId(Long tribeId);

    /**
     * 批量删除部落
     *
     * @param tribeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTribeByTribeIds(Long[] tribeIds);


    /**
     * 查询部落详情
     *
     * @param tribeId 部落id
     * @return 部落详情
     */
    TribeDetailDTO selectTribeDetail(Long tribeId);

    /**
     * 查询部落列表
     *
     * @param userId 用户id
     * @param status 状态
     * @return 部落列表
     */
    List<TribeSimpleDTO> selectListByUser(Long userId, Integer status);

    /**
     * 获取饼图数据
     * @param type 类型
     * @return 饼图数据
     */
    @MapKey("name")
    Map<String, Map<String, Long>> getPie(String type);
}
